// cf-360
// 题意：给定一个字符串s，长度n(<=2000)，定义等长字符串t的相关s的美丽值
//       是(i, j)对的对数，每个(i, j)有t[i..j]子串字典序严格大于s[i..j]
//       子串。现在问s串有多少相关它美丽值为k(<=2000)的字符串。
//
// 题解：本来想法很接近了。假设对于某个字符串t，若t[i]>s[i](i从0开始)那么
//       对于i这个位置就有n-i个串字典序严格大于s的对应子串，若t[i]<s[i]
//       则为零个。若t[i]=s[i]那么就要往后看第一个不等的地方，还是分大于
//       等于两种情况讨论。
//       所以就设计出这样的状态，f[i][j]表示匹配了前i个串且t[i]!=s[i], 
//       美丽值为j的串的个数。
//       
//       转移就分两种：
//        1.若t[i]<s[i]，假设从第i位往前有p个等号（对于t串和s串字符相等）
//           f[i][j] += sigma(f[i-p-1][j] * (s[i]-'a'))
//        2.若t[i]>s[i]，假设从第i位往前有p个等号（对于t串和s串字符相等）
//           f[i][j] += sigma(f[i-p-1][j - (p+1)*(n-i) ] * ('z'-s[i]))
//
//        第一个可以用部分和优化，
//        第二个注意到j-p*(n-i)>=0，所以p<=j/(n-i)，即p<=k/(n-i),
//        所以总的复杂度就是
//              k*sigma(k/(n-i)), i=1 to n-1
//             =k*sigma(k/i) < k*(n+k*log(k))，复杂度足够。
//
//
// run: $exec < input
// opt: 0
// flag: -g
#include <iostream>
#include <string>

long long const mo = 1000000007;
int const maxn = 2007;
long long f[maxn][maxn];
long long sum[maxn][maxn];
int n, k;
std::string s;

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin >> n >> k;
	std::cin >> s;

	f[0][0] = sum[0][0] = sum[1][0] = 1;
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j <= k; j++) {
			// t[i] < s[i]
			f[i][j] = ((s[i - 1] - 'a') * sum[i - 1][j]) % mo;
			// t[i] > s[i]
			for (int p = 0; p < i; p++) {
				if (j < (n - i + 1) * (p + 1)) break;
				f[i][j] += f[i - p - 1][j - (n - i + 1) * (p + 1)] * ('z' - s[i - 1]);
				f[i][j] %= mo;
			}
			sum[i][j] = (sum[i - 1][j] + f[i][j]) % mo;
		}
	}
	/*
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j <= k; j++) std::cout << f[i][j] << ' ';
		std::cout << '\n';
	}
	*/
	long long ans = 0;
	for (int i = 0; i <= n; i++)
		ans = (ans + f[i][k]) % mo;
	std::cout << ans % mo << '\n';
}

